package com.xpffly.design.template;

/**
 * @Author: xpengfei
 * @Date: 2021/3/28 13:23
 * @Description：悍马车 抽象模板类
 */
public abstract class HummerTemplate {
    /**
     * 汽车启动
     */
    protected abstract void start();

    /**
     * 汽车停止
     */
    protected abstract void stop();

    /**
     * 汽车鸣笛
     */
    protected abstract void alarm();

    /**
     * 汽车引擎响起
     */
    protected abstract void engineBoom();

    /**
     * 汽车开始跑
     */
    public final void run() {
        // 发动汽车
        this.start();
        // 引擎响
        this.engineBoom();
        // 喇叭响
        if (this.isAlarm()) {
            this.alarm();
        }
        // 停车
        this.stop();
    }

    /**
     * 钩子方法，决定汽车的喇叭是否响，默认会响
     *
     * @return
     */
    protected boolean isAlarm() {
        return true;
    }
}
